package com.demo.youxuanmall.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.demo.youxuanmall.common.Result;
import com.demo.youxuanmall.entity.Product;

import java.util.List;
import java.util.Map;
 
public interface ProductService extends IService<Product> {
    
    /**
     * 获取商品详情
     */
    Product getProductById(Long id);
    
    /**
     * 获取启用状态的商品列表
     */
    List<Product> listEnabledProducts();
    
    /**
     * 获取分类下的商品
     * @param categoryId 分类ID
     * @return 商品列表
     */
    List<Product> getProductsByCategory(Long categoryId);
    
    /**
     * 搜索商品
     * @param keyword 关键词
     * @return 商品列表
     */
    List<Product> searchProducts(String keyword);
    
    /**
     * 获取相关商品
     */
    List<Product> getRelatedProducts(Long categoryId, Long currentProductId, int limit);
    
    /**
     * 分页获取所有商品
     */
    Result<Page<Product>> getAllProducts(int pageNum, int pageSize);
    
    /**
     * 按条件搜索商品
     */
    Result<Page<Product>> searchProductsForAdmin(String keyword, Long categoryId, Integer status, int pageNum, int pageSize);
    
    /**
     * 添加或更新商品
     */
    Result<Product> saveOrUpdateProduct(Product product);
    
    /**
     * 上架或下架商品
     */
    Result<Boolean> updateProductStatus(Long productId, Integer status);
    
    /**
     * 删除商品
     */
    Result<Boolean> deleteProduct(Long productId);
    
    /**
     * 获取热门商品
     * @param limit 限制数量
     * @return 热门商品列表
     */
    List<Map<String, Object>> getHotProducts(int limit);

    /**
     * 分页查询商品列表（带关键字搜索）- 前台使用
     */
    Page<Product> getProductPage(Page<Product> page, String keyword);

    /**
     * 分页查询商品列表（带关键字搜索）- 管理后台使用
     */
    Page<Product> getAdminProductPage(Page<Product> page, String keyword);
} 